# 类的种类
    # 新式类 : 继承object,存在在py2,py3(py3中都是新式类,py2里主动继承object的才是新式类)
    # 经典类 : 只在py2中,不继承object默认是经典类
# 继承顺序
    # 深度优先 : 经典类
    # 广度优先 : 新式类
        # 查看广度优先的顺序 : 类名.mro()
        # 遵循的算法 :C3
# 抽象类
    # 为什么要用抽象类 : 为了规范子类必须实现和父类的同名方法
    # 抽象类用到的格式(至少会写一种,两种见到了都要认识)
       # 不需要模块的
       # class 父类:
       #     def 子类必须实现的方法名(self,参数们):
       #         raise NotImplementedError('提示信息')
       # class 子类(父类):
       #     def 父类要求实现的方法(self,参数们):
       #         print('''code''')
      # 需要模块的
        # from abc import ABCMeta,abstractmethod
        # class 父类(metaclass = ABCMeta):
        #     @abstractmethod
        #     def 子类必须实现的方法名(self,参数们):pass
        # class 子类(父类):
        #     def 父类要求实现的方法(self,参数们):
        #         print('''code''')
# 归一化设计
    # class A:
    #     def 同名功能(self):pass
    # class B:
    #     def 同名功能(self):pass
    #
    # def 函数名(obj):
    #     obj.同名功能()
# 多态
    # 什么是多态 : 一个类表现出的多种形态,实际上是通过继承来完成的
                #  如果狗类继承动物类,猫类也继承动物类
                #  那么我们就说猫的对象也是动物类型的
                #  狗的对象也是动物类型的
                # 在这一个例子里,动物这个类型表现出了猫和狗的形态
    # java中的多态是什么样
        # def eat(动物类型 猫的对象/狗的对象,str 食物):
        #     print('动物类型保证了猫和狗的对象都可以被传递进来')
    # python中的多态是什么样 : 处处是多态
    # 鸭子类型
        # 子类继承父类,我们说子类是父类类型的(猫类继承动物,我们说猫也是动物)
        # 在python中,一个类是不是属于某一个类型
        # 不仅仅可以通过继承来完成
        # 还可以是不继承,但是如果这个类满足了某些类型的特征条件
        # 我们就说它长得像这个类型,那么他就是这个类型的鸭子类型

# 就记住两件事儿:
    # 所有的类都必须继承object
    # 如果见到了抽象类的写法,一定要知道要在子类中实现同名方法








